import request from '@/utils/request'
import { useUserStore } from '@/stores/user'

// 登录数据类型
export interface LoginData {
  username: string
  password: string
  remember?: boolean
}

// 注册数据类型
export interface RegisterData {
  username: string
  password: string
  confirmPassword: string
  email: string
}

// 用户信息类型
export interface UserInfo {
  id: number
  username: string
  email: string
  avatar?: string
  role: string
  createTime: string
  updateTime: string
  gender?: string
  phone?: string
  picture?: string
  state?: number
  context?: string
  title?: string | string[]
  birthday?: string | null
}

// 修改密码数据类型
export interface PasswordData {
  oldPassword: string
  newPassword: string
  confirmPassword: string
}

const baseUrl = '/api/user'

// 登录
export function login(data: LoginData) {
  return request({
    url: `${baseUrl}/login`,
    method: 'post',
    data
  })
}

// 注册
export function register(data: RegisterData) {
  return request({
    url: `${baseUrl}/register`,
    method: 'post',
    data
  })
}

// 检查用户名是否可用
export function checkUsername(username: string) {
  return request({
    url: `${baseUrl}/check-username`,
    method: 'get',
    params: { username }
  })
}

// 获取用户信息
export function getUserInfo() {
  return request({
    url: `${baseUrl}/info`,
    method: 'get'
  })
}

// 更新用户信息
export function updateUserInfo(data: Partial<UserInfo>) {
  const userId = data.id
  
  if (!userId) {
    return Promise.reject(new Error('缺少用户ID'))
  }
  
  return request({
    url: `${baseUrl}/update/${userId}`,
    method: 'put',
    data
  })
}

// 删除用户
export function deleteUser(id: number) {
  return request({
    url: `${baseUrl}/del/${id}`,
    method: 'delete'
  })
}

// 修改密码
export function changePassword(data: PasswordData) {
  return request({
    url: `${baseUrl}/password`,
    method: 'put',
    data
  })
}

// 上传头像
export function uploadAvatar(data: FormData, userId: number) {
  if (!userId) {
    return Promise.reject(new Error('用户未登录'))
  }
  
  return request({
    url: `${baseUrl}/upload/${userId}`,
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    data
  })
}

// 更新通知设置
export function updateNotificationSettings(settings: Record<string, boolean>) {
  return request({
    url: `${baseUrl}/notification-settings`,
    method: 'put',
    data: settings
  })
}

// 退出登录
export function logout() {
  return request({
    url: `${baseUrl}/logout`,
    method: 'post'
  })
}

// 根据ID获取用户信息
export function getUserById(id: number) {
  console.log(`正在请求用户信息，用户ID: ${id}`);
  return request({
    url: `${baseUrl}/getUser/${id}`,
    method: 'get'
  })
}

/**
 * 验证用户凭证
 * @param username 用户名
 * @param password 密码
 * @returns 用户ID或null
 */
export function authenticate(username: string, password: string) {
  return request({
    url: `${baseUrl}/auth/login`,
    method: 'post',
    data: { username, password }
  })
}

/**
 * 根据用户名获取用户ID
 * @param username 用户名
 * @returns 用户ID
 */
export function getUserIdByUsername(username: string) {
  return request({
    url: `${baseUrl}/id/by-username`,
    method: 'get',
    params: { username }
  })
}

/**
 * 根据用户ID获取用户名
 * @param userId 用户ID
 * @returns 用户名
 */
export function getUsernameById(userId: number) {
  return request({
    url: `${baseUrl}/name/${userId}`,
    method: 'get'
  })
}

/**
 * 检查用户是否存在
 * @param userId 用户ID
 * @returns 是否存在
 */
export function checkUserExists(userId: number) {
  return request({
    url: `${baseUrl}/exists/${userId}`,
    method: 'get'
  })
}